The present invention relates to an electronic spreadsheet software program, and is more particularly directed to a recalculation engine version stamp for a spreadsheet program.
Spreadsheet programs, such as Microsoft""s xe2x80x9cEXCELxe2x80x9d spreadsheet, are useful tools in performing computational tasks such as keeping household budgets, work schedules, tracking bank accounts, maintaining inventories, and so on. As the use of personal computers within the home and business environments becomes more common, so too does the use of spreadsheet programs. The versatility of spreadsheet applications and the ease with which they are adapted to various tasks has resulted in their widespread use. With ongoing advances in the speed and capabilities of personal computers, enhanced features have been developed for spreadsheet programs.
A spreadsheet program is comprised of multiple cells arranged in rows and columns, with each individual cell containing its own data. An individual cell is usually identified by its column and row. For example, the cell that is located in column A at row 1 is referred to as xe2x80x9ccell A1xe2x80x9d, the cell that is located in column C at row 5 is referred to as xe2x80x9ccell C5xe2x80x9d, and so forth.
One of the benefits of a spreadsheet program is that the user can set up a dependency relationship among multiple cells in a spreadsheet. For example, a user may specify that the sum of two cells (A1 and A2) is reflected in a third cell A3 as SUM (A1:A2). The spreadsheet program will then automatically calculate the value of cell A3 by summing the values in cells A1 and A2. This eliminates the need for the user to manually calculate the value of the cell.
In the example above, cell A3 is said to xe2x80x9cdependxe2x80x9d on cells A1 and A2. That means that if the user changes the value of either cell A1 or cell A2, then the value in cell A3 needs to be recalculated. Most spreadsheet programs, including Microsoft xe2x80x9cEXCELxe2x80x9d, are designed to recognize these xe2x80x9cdependency chainsxe2x80x9d and to recalculate the cells when necessary.
From time to time, calculation bugs are found in spreadsheet programs. These calculation bugs take the form of the user creating or modifying a spreadsheet in such a way that one of the cells of the spreadsheet evaluates to the wrong value. When these calculation bugs are identified by the developer of the spreadsheet program, a patch is commonly issued to repair the bugs in subsequent versions of the program. While this software patch is effective to prevent that particular calculation bug in the program files subsequently created, all previously saved program files may still exhibit the calculation bug. Thus, a user that opens a program file that was saved in an older version of the spreadsheet program, in order to be completely safe from the calculation bug, must perform a full recalculation of the file. Once a full recalculation is performed, the cells that evaluated incorrectly will have been reevaluated to the correct value.
Requiring the user to perform a full recalculation every time that a file is opened has many problems. One significant problem is performance, as a full recalculation of a program file can take a lot of time (e.g., even several hours for large program files). Moreover, the user has no way of knowing whether the full recalculation is actually necessary or not. That is to say, if a full recalculation is required for every instance, there will be occasions when the full recalculation is performed on a file that did not exhibit the calculation bug. Finally, even when a full recalculation is performed, the user may not be able to notice whether a change was effected.
Thus, there is a need for a mechanism for identifying whether a particular program file is likely to need a full recalculation when the file is opened. By only performing a full recalculation on those files likely to need it, users are spared from having to fully recalculate every single file.
The invention is a recalculation engine version stamp that provides a method for determining whether a particular spreadsheet program file is likely to need a full recalculation upon open. According to one aspect of the present invention, a xe2x80x9ccalculation engine version numberxe2x80x9d will be stored internally in the spreadsheet program. The calculation engine version number represents the current version of the program""s calculation engine, not the version of the program itself. Thus, the calculation engine version number is different than and independent from any program version number that may be stored in the program.
According to another aspect of the present invention, when a file that has been calculated at least once is saved, the calculation engine version number of the program is written out and saved in the spreadsheet program file. The calculation engine version number that is saved in the spreadsheet program file is referred to as a xe2x80x9crecalculation engine version stampxe2x80x9d because it identifies which version of the calculation engine was used when the file was last recalculated and saved. Accordingly, the recalculation engine version stamp enables the program to determine when newer versions of the calculation engine version number are available and to recalculate the program file at that time.
According to another aspect of the present invention, when a spreadsheet program file is opened, the recalculation engine version stamp is compared to the calculation engine version number of the program. If the numbers are the same, this would indicate that the program file was saved in the most current version of the calculation engine available. Thus, it would be of no benefit to perform a full recalculation on this file.
On the other hand, if the recalculation engine version number of the program file is older than the version of the calculation engine of the program used to open the file, this would indicate that the program file may contain calculation bugs and that the more recent calculation engine version number may repair those bugs. In this case, the program will perform a full recalculation of the program file.
More specifically described, the present invention is a method for determining whether a spreadsheet program file should be fully recalculated upon opening. According to the method, the spreadsheet program file is opened in a first spreadsheet application program, where the first spreadsheet application program has a first calculation engine version number. After at least one calculation operation is performed on the spreadsheet program file, the spreadsheet application program file is saved and a recalculation engine version stamp is written to the spreadsheet program file. The recalculation engine version stamp corresponds to the first calculation engine version number.
Subsequently, when the spreadsheet program file is opened in a second spreadsheet application program, the recalculation engine version stamp is compared to the calculation engine version number of the second spreadsheet application program. If the calculation engine version number of the second spreadsheet application program is more recent than the recalculation engine version stamp of the spreadsheet program file, then a full recalculation of the spreadsheet program file is performed.